#pragma once
#include<stdio.h>
#include<stdlib.h>
#include"queue.h"

typedef int BTDatatype;

typedef struct BinaryTreeNode
{
	BTDatatype data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;

//创建节点
BTNode* BuyNode(BTDatatype x);

//创建二叉树
BTNode* CreatBinaryTree();

//前序遍历
void PreOrder(BTNode* root);

//中序遍历
void InOrder(BTNode* root);

//后序遍历
void PostOrder(BTNode* root);

//结点个数  传址调用
void BinaryTressSize1(BTNode* root, int* psize);

//结点个数
int BinaryTressSize2(BTNode* root);

//树的高度
int BinaryTreeHeight(BTNode* root);

//第K层的结点个数
int BinaryTreeKLevel(BTNode* root, int k);

//二叉树查找值为x的结点
BTNode* BinaryTreeFind(BTNode* root, BTDatatype x);

//层序遍历
void LevelOrder(BTNode* root);

//判断一棵树是否为完全二叉树
int isFullBinaryTree(BTNode* root);

//销毁二叉树
void DestroyBinaryTree(BTNode* root);